import { login, register, getUserInfo, logout } from '@/api/login'
import { getUserVerification } from '@/api/user'
import { setToken, removeToken, getUserId } from '@/utils/auth'

const user = {
  state: {
    userId: getUserId() || 0,
    token: '',
    userInfo: {},
    userVerification: {}
  },

  mutations: {
    SET_USER_ID: (state, userId) => {
      state.userId = userId
    },
    SET_TOKEN: (state, token) => {
      state.token = token
    },
    SET_USER_INFO: (state, userInfo) => {
      state.userInfo = userInfo
    },
    SET_USER_VERIFICATION: (state, userVerification) => {
      state.userVerification = userVerification
    }
  },

  actions: {
    // 登录
    Login({ commit }, userInfo) {
      const username = userInfo.name.trim()
      const idCard = userInfo.idNumber
      const password = userInfo.password
      
      console.log('开始登录，用户信息:', { username, idCard, password: '******' })
      
      return new Promise((resolve, reject) => {
        login(username, idCard, password).then(res => {
          console.log('登录API返回结果:', res)
          
          // 设置 token
          if (res && res.data && res.data.data) {
            console.log('登录成功，token信息:', res.data.data)
            setToken(res.data.data)
            commit('SET_USER_ID', res.data.data.userId)
            commit('SET_TOKEN', res.data.data.accessToken)
            resolve(res)
          } else {
            console.error('登录响应数据格式不正确:', res)
            reject(new Error('登录响应数据格式不正确'))
          }
        }).catch(error => {
          console.error('登录失败:', error)
          reject(error)
        })
      })
    },

    // 注册
    Register({ commit }, userInfo) {
      const username = userInfo.name.trim()
      const idCard = userInfo.idNumber
      const password = userInfo.password
      
      console.log('开始注册，用户信息:', { username, idCard, password: '******' })
      
      return new Promise((resolve, reject) => {
        register(username, idCard, password).then(res => {
          console.log('注册API返回结果:', res)
          
          // 设置 token，注册成功后直接登录
          if (res && res.data && res.data.data) {
            console.log('注册成功，token信息:', res.data.data)
            setToken(res.data.data)
            commit('SET_USER_ID', res.data.data.userId)
            commit('SET_TOKEN', res.data.data.accessToken)
            resolve(res)
          } else {
            console.error('注册响应数据格式不正确:', res)
            reject(new Error('注册响应数据格式不正确'))
          }
        }).catch(error => {
          console.error('注册失败:', error)
          reject(error)
        })
      })
    },

    // 获取用户信息
    GetUserInfo({ commit, state, dispatch }) {
      return new Promise((resolve, reject) => {
        getUserInfo().then(res => {
          console.log('获取用户信息返回结果:', res)
          
          if (!res.data || res.data.code !== 0 || !res.data.data) {
            reject('获取用户信息失败')
            return
          }
          
          const userInfo = res.data.data
          
          // 保存用户信息到 store
          commit('SET_USER_INFO', userInfo)
          
          // 如果用户已认证，获取实名认证信息
          if (userInfo.auth === 1) {
            dispatch('GetUserVerification')
          }
          
          resolve(res)
        }).catch(error => {
          console.error('获取用户信息失败:', error)
          reject(error)
        })
      })
    },
    
    // 获取用户实名认证信息
    GetUserVerification({ commit, state }) {
      return new Promise((resolve, reject) => {
        getUserVerification().then(res => {
          console.log('获取用户实名认证信息返回结果:', res)
          
          if (!res.data || res.data.code !== 0 || !res.data.data) {
            reject('获取用户实名认证信息失败')
            return
          }
          
          const userVerification = res.data.data
          
          // 保存用户实名认证信息到 store
          commit('SET_USER_VERIFICATION', userVerification)
          resolve(res)
        }).catch(error => {
          console.error('获取用户实名认证信息失败:', error)
          reject(error)
        })
      })
    },

    // 退出系统
    LogOut({ commit, state }) {
      return new Promise((resolve, reject) => {
        logout().then(() => {
          commit('SET_USER_ID', 0)
          commit('SET_TOKEN', '')
          commit('SET_USER_INFO', {})
          commit('SET_USER_VERIFICATION', {})
          removeToken()
          resolve()
        }).catch(error => {
          reject(error)
        })
      })
    }
  }
}

export default user 